/*
 * RSATools.h
 *
 *   Created on: 2010-3-24     
 *  Description: 调用Crypto++进行RSA加密和解密
 *    Copyright: 2010 @ ICT Li Heyuan
 */

#ifndef RSATOOLS_H_
#define RSATOOLS_H_

#include <cryptopp/rsa.h>
#include <cryptopp/osrng.h>
using namespace CryptoPP;

#include <string>
using std::string;

class RSATools
{
public:
	//用n和e构造（用于公钥加密）
	RSATools(const string &e, const string&n);
	//复制构造函数
	RSATools(const RSATools &other);
	//创建公/私密钥对儿时候的构造方法(内置私钥)
	RSATools(unsigned int size = 1024);
	//等于操作符
	RSATools& operator =(const RSATools &right);
	virtual ~RSATools();

	//RSA加密之后Base64，使用public_key
	string encryptWithBase64(const string &plain);
	//先base64，再RSA解密，使用private_key
	string decryptWithBase64(const string &cipher_b64);

	//获取public_key的e
	string getPublicExponent();
	//获取public_key的n
	string getModulus();

private:
	//加密，使用public_key
	string encrypt(const string &plain);
	//解密，使用private_key
	string decrypt(const string &cipher);
private:
	/**随机种子*/
	AutoSeededRandomPool _rng;
	/**rsa参数，含public/private key等*/
	InvertibleRSAFunction _rsa_param;
};

#endif /* RSATOOLS_H_ */
